<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script src="./01_this指向问题.js"></script>
  <script>
   // -----------------1.独立函数调用------------------------
    //定义在对象中，但是属于独立函数调用
    var obj = {
      name:'123',
      bar:function(){
        console.log('123',this)
      }
    }
    obj.bar()//这样属于隐式绑定
    var baz = obj.bar
    baz()//window
    //严格模式调用下，独立调用的函数中的this指向是undefined
   // -----------------2.隐式绑定规则------------------------
   //2.1调用位置中，是通过某个对象发起的函数调用
  var obj = {
    name: '123',
    bar: function () {
      console.log(this)
    }
  }
   obj.bar()
    // -----------------3.显示绑定规则------------------------
   //  apply/call/bind
   function callFun(){
    console.log('callFun',typeof this)
   }
   callFun.apply('abc')//{'abc'} 严格模式下是字符串类型
   callFun.apply(undefined)//window 显示绑定规则中，传入的对象是undefined或null，打印出window，会使用默认规则
    // -----------------4.new绑定规则------------------------
    function newfoo(){
      console.log('newfoor',this)
      this.name='sss'
    }
    new newfoo()

  </script>
</body>
</html>